﻿using Admin.CommonLib.Models.User;
using Swimj.CommonLib.Base;
using Swimj.Core.DependencyInjection;

namespace Admin.ApplicationLib.Services
{
    public interface IUserService : IScopedDependency
    {
        Task<PaginatedResult<UserInfoResponseDto>> QueryUsersByPageAsync(UserSearchRequestDto model);

        Task<Result<IList<UserInfoResponseDto>>> QueryUsersAsync(UserSearchRequestDto model);

        Task<Result<UserInfoResponseDto>> GetUserAsync(Guid id);

        Task<Result<UserInfoResponseDto>> CreateUserAsync(UserEditRequestDto model);

        Task<Result<UserInfoResponseDto>> UpdateUserAsync(Guid id, UserEditRequestDto model);

        Task<Result<UserInfoResponseDto>> DeleteUserAsync(Guid id);

        Task<Tuple<Stream, string>> ExportAsync(UserSearchRequestDto model);

        Task<Tuple<Stream, string>> ExportTemplateAsync();

        Task<object?> ImportAsync(int importType, MemoryStream memoryStream);
    }
}